#pragma once

#include <memory>
#include <QObject>

class QQmlApplicationEngine;
class ModuleManager;

namespace infrastructure {
    class ServiceContainer;
}

/**
 * @class AppBuilder
 * @brief 应用程序构建器 - 负责DI容器配置和QML应用组装
 * @details 简化版的ApplicationHost，专注于QML应用的构建和启动
 */
class AppBuilder : public QObject
{
    Q_OBJECT

public:
    AppBuilder();
    ~AppBuilder();

    /**
     * @brief 构建并启动应用程序
     * @return bool 构建是否成功
     */
    bool build();

    /**
     * @brief 获取服务容器
     * @return std::shared_ptr<infrastructure::ServiceContainer> 服务容器
     */
    std::shared_ptr<infrastructure::ServiceContainer> getContainer() const;

private:
    /**
     * @brief 配置服务容器
     */
    void configureServices();

    /**
     * @brief 初始化服务
     */
    void initializeServices();

    /**
     * @brief 创建表现层
     * @return bool 创建是否成功
     */
    bool createPresentation();

    /**
     * @brief 处理构建错误
     * @param operation 操作名称
     * @param error 错误信息
     */
    void handleBuildError(const QString& operation, const QString& error);

private:
    // 核心组件
    std::shared_ptr<infrastructure::ServiceContainer> m_container;

    // 表现层组件
    std::unique_ptr<ModuleManager> m_moduleManager;

    // 状态
    bool m_built = false;
};